# import random
#
# from pynput import keyboard
# from playsound import playsound
# from threading import Thread
#
# soundList=['d:/PythonProject/安静.mp3','d:/PythonProject/发如雪.mp3']
# count=0 # 记录当前用户按了多少次键盘
# def onRelease(key):
#     print(key)
#     global count
#     count+=1
#     if count%10==0:
#         # 播放音频
#         # 生成一个随机数
#         i=random.randint(0,len(soundList)-1)
#         # playsound(soundList[i])
#         t=Thread(target=playsound,args=(soundList[i]),)
#         t.start()
#
# # sadasandasdasdsadasdasdadadsaddddddddssssssssssssssswswswswsaaaaaaaaaaaaaawe
# # 创建好listener之后 键盘按键动作会被捕获到123456789112345678910
# # 捕获到之后能执行一段代码
# listener=keyboard.Listener(on_release=onRelease)
# listener.start()
# listener.join()
import os.path
import sys


# 实现一个命令行版本的学生管理系统

students =[] # 使用这个全局变量来管理所有的学生信息

def save():
    """
    用于存档
    """
    with open('d:/PythonProject/record.txt','w',encoding='utf8') as f:
        for s in students:
            f.write(f"{s['stu_id']}\t{s['stu_name']}\t{s['stu_sex']}\t{s['stu_class_name']}\n")
        print(f'[存档]成功,共存储了{len(students)}条记录')
def load():
    """
    读档
    """
    # 如果存档文件不存在 则直接返回
    if not os.path.exists('d:/PythonProject/record.txt'):
        # 为了避免读方式打开文件时文件不存在引起异常
        return
    # 读档时先把旧数据清理干净
    global students
    students= []
    with open('d:/PythonProject/record.txt','r',encoding='utf8') as f:
        for line in f:
            # 针对这一行数据，按照\t进行切分
            # 切分之前，去除\n
            line=line.strip() # 去除一个字符串开头和结尾的空白符 空白符：空格 换行 回车 制表符 翻页符
            tokens=line.split('\t')
            if len(tokens)!=4:
                print(f'当前行格式存在问题！line={line}')
                continue
            student={
                'stu_id':tokens[0],
                'stu_name':tokens[1],
                'stu_sex':tokens[2],
                'stu_class_name':tokens[3]
            }
            students.append(student)
    print(f'读档成功，共加载了{len(students)}条记录')


def menu():
    print('1.新增学生')
    print('2.显示学生')
    print('3.查找学生')
    print('4.删除学生')
    print('0.退出程序')
    choice=input('请输入您的选择:')
    return choice

def insert():
    print('[新增学生]开始')
    stu_id=input('请输入学生的学号：')
    stu_name=input('请输入学生的姓名：')
    stu_sex=input('请输入学生的性别：')
    if stu_sex not in ('男','女'):
        print('输入性别有误，新增失败！')
        return
    stu_class_name=input('请输入学生的班级:')
    # 使用一个字典，将上述信息聚合起来 组装到一起
    student={
        'stu_id':stu_id,
        'stu_name':stu_name,
        'stu_sex':stu_sex,
        'stu_class_name':stu_class_name,
    }
    global students
    students.append(student)
    # 增加一个保存操作
    save()
    print('[新增学生]结束')
def show():
    # 遍历全局变量列表，将每个学生信息打印出来
    print('[显示学生]开始')
    for s in students:
        print(f"{s['stu_id']}\t{s['stu_name']}\t{s['stu_sex']}\t{s['stu_class_name']}")
    print(f'[显示学生]结束 共显示了{len(students)}条信息')

def delete():
    print('[删除学生]开始')
    id=input('请输入要删除学生的学号：')
    # 看看这个学号对应的同学是哪个字典，然后把这个字典从列表中删除
    for s in students:
        if id ==s['stu_id']:
            print(f"删除{s['stu_name']}")
            students.remove(s)
    # 增加一个修改
    save()
    print('[删除学生]结束')
def find():
    # 根据学生姓名 来进行查找
    print('[查找学生]开始')
    name=input('请输入要查找同学的姓名：')
    count=0
    for s in students:
        if name==s['stu_name']:
            print(f"{s['stu_id']}\t{s['stu_name']}\t{s['stu_sex']}\t{s['stu_class_name']}")
            count+=1
    print(f'[查找学生]结束,共找到了{count}个匹配的同学')


def main():
    """
    入口函数
    """
    # 通过控制台和用户交互
    print('--------------------')
    print('--欢迎来到学生管理系统--')
    print('--------------------')
    load()
    while True:
        # 通过menu函数打印菜单
        choice=menu()
        if choice=='1':
            # 新增学生
            insert()
        elif choice=='2':
            # 显示所有学生
            show()
        elif choice=='3':
            # 查找学生
            find()
        elif choice=='4':
            # 删除学生
            delete()
        elif choice=='0':
            # 退出程序
            print('goodbye！')
            sys.exit(0)
        else:
            print('输入有误，请重新输入')
            # 进入下次循环，让用户重新输入

main()